package com.wjn.basic.stringobject;

/**
 * 字符串比较  == equals 的区别\
 <<	  num<< n	相当于 num×2n，算数左移（逻辑左移）
 >>	  num>>n	相当于num2n，算数右移
 >>>  num>>>n	逻辑右移，当num为正数和算术右移一个效果
 *
 *  普通类型的 final 类型的创建在常量池中
 *
 */
public class StringDemo {
    private  String name;

    public StringDemo(String name){
        this.name=name;
    }

    public StringDemo(){

    }

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        String a=new String("1"); // 先查询常量池中是否有"1"对象，有则拷贝对象到java堆，否则在常量池中创建对象后再拷贝到java堆中
        String b=new String("1");
        a.intern();   //放入常量池，由于已经有了所以无任何操作
        String c="1";  //常量池信息

        System.out.println(a==b);// false,不同的对象引用当然不一样
        System.out.println(a.equals(b));//比较的是对象的值信息
        System.out.println(b==c);//java堆地址和常量池地址不相等

        String s3 = new String("1") + new String("1");//没有在常量池中创建，只是创建了对象
        s3.intern();//java8:将java 堆中的引用放入常量池中. java6:创建了一个新的对象放入常量池中
        String s4="11";//  常量池中有直接取出
        System.out.println(s3 == s4);//java6 false   java8 true

    }
}
